package cn.hh.ymcc.service.impl;

import cn.hh.ymcc.domain.Login;
import cn.hh.ymcc.dto.LoginDto;
import cn.hh.ymcc.mapper.LoginMapper;
import cn.hh.ymcc.result.JSONResult;
import cn.hh.ymcc.service.ILoginService;
import cn.hh.ymcc.util.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * <p>
 * 登录表 服务实现类
 * </p>
 *
 * @author huang.hao
 * @since 2025-04-20
 */
@Service
public class LoginServiceImpl extends ServiceImpl<LoginMapper, Login> implements ILoginService {

    /**
     * 登录
     * 拼接 密码模式的请求路径
     * 发送http请求, 获取Token
     * 返回Token等相关参数给前端
     * @param dto
     * @return
     */
    @Override
    public JSONResult login(LoginDto dto) {

//       拼接 密码模式的请求路径
        String tokenUrlStr = "http://localhost:10040/oauth/token?client_id=%s&client_secret=%s&grant_type=password&username=%s&password=%s";
        String clientId = null;
        String security = "123";
        if (dto.getType() == 0){  // 0是后端
            clientId = "admin";
        }else if(dto.getType() == 1){ // 1是前段
            clientId = "website";
        }

//       发送http请求, 获取Token
        String tokenUrl = String.format(tokenUrlStr, clientId, security, dto.getUsername(), dto.getPassword());

        // 发送post请求
        String sentPost = HttpUtil.sendPost(tokenUrl, null);

//       返回Token等相关参数给前端
        Map<String,Object> map = JSON.parseObject(sentPost, Map.class);
        if (map.containsKey("error")){  // 如果
            JSONResult.error("用户名或密码错误");
        }

        // token过期时间
        Integer expires = (Integer) map.get("expires_in");
        Long value = Long.valueOf(expires);
        long expiresTime = System.currentTimeMillis() + value.longValue();
        map.put("expiresTime",expiresTime);

        return JSONResult.success(map);
    }
}
